﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class ОстаткиОтпусков
	{
		////////////////////////////////////////////////////////////////////////////////
		// ПОДСИСТЕМА ОСТАТКИ ОТПУСКОВ
		//
		////////////////////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////////////////////
		// ПРОГРАММНЫЙ ИНТЕРФЕЙС

		public object ОстатокОтпускаСотрудникаНаДату(/*Знач Сотрудник, Знач ДатаОстатков = '00010101', Знач ЭтоРасчетПриУвольнении = Ложь, ПорядокРасчетаОсновногоОтпуска = Неопределено*/)
		{
			if(true/*Не ЗначениеЗаполнено(Сотрудник)*/)
			{
			}
			if(true/*Не ЗначениеЗаполнено(ДатаОстатков)*/)
			{
				//ДатаОстатков = ОбщегоНазначения.ПолучитьРабочуюДату();
			}
			//ТаблицаДанных = ОписаниеТаблицыДанных();
			//Строка = ТаблицаДанных.Добавить();
			//Строка.Сотрудник							= Сотрудник;
			//Строка.ДатаОстатков							= НачалоДня(ДатаОстатков);
			//Строка.ЭтоРасчетПриУвольнении				= ЭтоРасчетПриУвольнении;
			if(true/*ЭтоРасчетПриУвольнении*/)
			{
				//Строка.ПорядокРасчетаОсновногоОтпуска	= ПорядокРасчетаОсновногоОтпуска;
			}
			//Результат = ОстаткиОтпусков(ТаблицаДанных)[0];
			//ОстаткиВРазрезеРабочихЛетИВидовОтпусков = Новый Массив;
			return null;
		}

		public object ОстатокОтпускаСпискаСотрудниковНаДату(/*Знач МассивСотрудников, Знач ДатаОстатков = '00010101'*/)
		{
			if(true/*Не ЗначениеЗаполнено(ДатаОстатков)*/)
			{
				//ДатаОстатков = ОбщегоНазначения.ПолучитьРабочуюДату();
			}
			//ТаблицаДанных = ОписаниеТаблицыДанных();
			//Результат = ОстаткиОтпусков(ТаблицаДанных);
			//ТаблицаСведений = Новый ТаблицаЗначений;
			//ТаблицаСведений.Колонки.Добавить("Сотрудник");
			//ТаблицаСведений.Колонки.Добавить("ОстатокНаДату");
			//ТаблицаСведений.Колонки.Добавить("РабочийГодС");
			//ТаблицаСведений.Колонки.Добавить("РабочийГодПо");
			//ТаблицаСведений.Колонки.Добавить("Примечание");
			//ТаблицаСведений.Колонки.Добавить("ОстаткиВРазрезеВидовОтпусков");
			//ТаблицаСведений.Колонки.Добавить("ОстаткиВРазрезеРабочихЛетИВидовОтпусков");
			return null;
		}

		public object СведенияОбОтпускахСпискаСотрудников(/*Знач ТаблицаОтпусков, Знач ТекущийРегистратор = Неопределено, Знач ЭтоЗапланированныйОтпуск = Ложь, Знач ДатаДокумента = '00010101'*/)
		{
			if(true/*Не ЗначениеЗаполнено(ДатаДокумента)*/)
			{
				//ДатаДокумента = НачалоДня(ОбщегоНазначения.ПолучитьРабочуюДату());
			}
			//ТаблицаДанных = ОписаниеТаблицыДанных();
			//ТаблицаСведений = Новый ТаблицаЗначений;
			//ТаблицаСведений.Колонки.Добавить("Сотрудник");
			//ТаблицаСведений.Колонки.Добавить("ДатаНачала");
			//ТаблицаСведений.Колонки.Добавить("ДатаОкончания");
			//ТаблицаСведений.Колонки.Добавить("РабочийГодС");
			//ТаблицаСведений.Колонки.Добавить("РабочийГодПо");
			//ТаблицаСведений.Колонки.Добавить("Примечание");
			//ТаблицаСведений.Колонки.Добавить("ВидЕжегодногоОтпуска");
			//ТаблицаСведений.Колонки.Добавить("КоличествоДнейВсего");
			//ТаблицаСведений.Колонки.Добавить("КоличествоДнейПрошлыхЛет");
			//ТаблицаСведений.Колонки.Добавить("КоличествоДнейАвансом");
			//ТаблицаСведений.Колонки.Добавить("ОстаткиВРазрезеВидовОтпусков");
			if(true/*ТаблицаДанных.Количество() = 0*/)
			{
			}
			//Результат = ОстаткиОтпусков(ТаблицаДанных);
			return null;
		}

		public object РабочийГодПериодаОтпуска(/*Знач Сотрудник, Знач ДатаНачала, Знач ДатаОкончания, Знач ТекущийРегистратор, Знач ПорядокРасчетаОсновногоОтпуска, Знач ИсключитьОсновнойОтпуск, Знач ДополнительныйОтпуск*/)
		{
			if(true/*ПорядокРасчетаОсновногоОтпуска = Неопределено*/)
			{
				//ПорядокРасчетаОсновногоОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПустаяСсылка();
			}
			//ТаблицаДанных = ОписаниеТаблицыДанных();
			//Строка = ТаблицаДанных.Добавить();
			//Строка.Сотрудник						= Сотрудник;
			//Строка.ДатаОстатков						= НачалоДня(ДатаОкончания);
			//Строка.ДатаНачала						= ДатаНачала;
			//Строка.ДатаОкончания					= ДатаОкончания;
			//Строка.ТекущийРегистратор				= ТекущийРегистратор;
			//Строка.ПорядокРасчетаОсновногоОтпуска	= ПорядокРасчетаОсновногоОтпуска;
			//Строка.ИсключитьОсновнойОтпуск			= ИсключитьОсновнойОтпуск;
			//Строка.ДополнительныйОтпуск				= ДополнительныйОтпуск;
			//Результат = ОстаткиОтпусков(ТаблицаДанных)[0];
			return null;
		}

		public object СправкаПоОтпускамСотрудника(/*Знач Сотрудник, Знач ДатаОстатков = '00010101', Знач ЭтоРасчетПриУвольнении = Ложь, ПорядокРасчетаОсновногоОтпуска = Неопределено*/)
		{
			if(true/*Не ЗначениеЗаполнено(Сотрудник)*/)
			{
			}
			if(true/*Не ЗначениеЗаполнено(ДатаОстатков)*/)
			{
				//ДатаОстатков = ОбщегоНазначения.ПолучитьРабочуюДату();
			}
			//ТаблицаДанных = ОписаниеТаблицыДанных();
			//Строка = ТаблицаДанных.Добавить();
			//Строка.Сотрудник							= Сотрудник;
			//Строка.ДатаОстатков							= НачалоДня(ДатаОстатков);
			//Строка.ЭтоРасчетПриУвольнении				= ЭтоРасчетПриУвольнении;
			if(true/*ЭтоРасчетПриУвольнении*/)
			{
				//Строка.ПорядокРасчетаОсновногоОтпуска	= ПорядокРасчетаОсновногоОтпуска;
			}
			//Результат = ОстаткиОтпусков(ТаблицаДанных)[0];
			//ФорматДаты = "ДФ='d MMM yyyy ""г.""'";
			//ТабДокумент = Новый ТабличныйДокумент;
			//ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СправкаПоОтпускамСотрудника";
			//Макет = ПолучитьОбщийМакет("СправкаПоОтпускамСотрудника");
			if(true/*Не ЗначениеЗаполнено(Результат.ДатаПриемаНаРаботу)*/)
			{
				//ОбластьМакета = Макет.ПолучитьОбласть("ОбщиеДанные");
				//ОбластьМакета.Параметры.Сотрудник						= Результат.Сотрудник;
				if(true/*Результат.Пол = Перечисления.ПолФизическихЛиц.Женский*/)
				{
					//ОбластьМакета.Параметры.ОбособленноеПодразделение	= "Сотрудница не принята на работу";
				}
				//ТабДокумент.Вывести(ОбластьМакета);
			}
			/*// Шапка отчета: место работы сотрудника и дата приема
*/
			//ОбластьМакета = Макет.ПолучитьОбласть("ОбщиеДанные");
			//ОбластьМакета.Параметры.Заполнить(Результат);
			//ТабДокумент.Вывести(ОбластьМакета);
			//ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
			//ОбластьМакета.Параметры.Период		= Формат(Результат.ДатаПриемаНаРаботу, ФорматДаты);
			if(true/*Результат.Пол = Перечисления.ПолФизическихЛиц.Женский*/)
			{
				//ОбластьМакета.Параметры.Комментарий	= "Принята на работу";
			}
			//ТабДокумент.Вывести(ОбластьМакета);
			if(true/*Результат.ПоложенныеПриПриемеНаРаботуВидыЕжегодныхОтпусков.Количество() > 0*/)
			{
				//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
				//ОбластьМакета.Параметры.Текст			= "Ежегодно предоставляемые отпуска";
				//ТабДокумент.Вывести(ОбластьМакета);
			}
			/*// Данные отчета в следующем порядке:
*/
			/*//  1 - Изменения дней отпуска в год
*/
			/*//  2 - Продления рабочего года
*/
			/*//  3 - Фактические отпуска
*/
			/*//  4 - Окончание рабочего года / Изменение остатка
*/
			//ТаблицаМакетовЗаПериод = Новый ТаблицаЗначений;
			//ТаблицаМакетовЗаПериод.Колонки.Добавить("Период");
			//ТаблицаМакетовЗаПериод.Колонки.Добавить("ДополнительныйПериод");
			//ТаблицаМакетовЗаПериод.Колонки.Добавить("Порядок");
			//ТаблицаМакетовЗаПериод.Колонки.Добавить("МассивОбластей");
			//ТаблицаМакетовЗаПериод.Сортировать("Период, ДополнительныйПериод, Порядок");
			/*// Подвал отчета: текущий остаток отпуска
*/
			//ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
			if(true/*ЭтоРасчетПриУвольнении*/)
			{
				//ОбластьМакета.Параметры.Период		= "На дату увольнения, " + Формат(ДатаОстатков, ФорматДаты);
			}
			//ТабДокумент.Вывести(ОбластьМакета);
			if(true/*Результат.ОстатокНаДату >= 0*/)
			{
				//ОбластьМакета = Макет.ПолучитьОбласть("Строка");
				//ОбластьМакета.Параметры.Текст			= ?(ЭтоРасчетПриУвольнении Или Результат.СотрудникУволен, "Подлежит компенсации", "Неиспользованный отпуск");
				//ОбластьМакета.Параметры.КоличествоДней	= "" + Результат.ОстатокНаДату + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",Результат.ОстатокНаДату);
			}
			//ТабДокумент.Вывести(ОбластьМакета);
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
		// Функции, непосредственно используемые при расчете остатков отпусков
		// Функция формирует описание таблицы данных для функции расчета остатка отпуска.
		//

		public object ОписаниеТаблицыДанных(/**/)
		{
			//ТаблицаДанных = Новый ТаблицаЗначений;
			/*// Сотрудник и дата, на которую определяется остаток отпуска. Это ключ, который должен быть уникальным для каждой строки.
*/
			//ТаблицаДанных.Колонки.Добавить("Сотрудник",					Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций"));
			//ТаблицаДанных.Колонки.Добавить("ДатаОстатков",				Новый ОписаниеТипов("Дата"));
			/*// Остатки отпуска на указанную дату.
*/
			/*// Если ЭтоРасчетПриУвольнении = Истина, тогда алгоритм будет игнорировать движения, сделанные расчетом при увольнении.
*/
			//ТаблицаДанных.Колонки.Добавить("ЭтоРасчетПриУвольнении",	Новый ОписаниеТипов("Булево"));
			/*// График отпусков на год.
*/
			/*// Фактические отпуска учитываются до даты документа, после даты документа только запланированные, если ЭтоЗапланированныйОтпуск = Истина.
*/
			//ТаблицаДанных.Колонки.Добавить("ЭтоЗапланированныйОтпуск",	Новый ОписаниеТипов("Булево"));
			//ТаблицаДанных.Колонки.Добавить("ДатаДокумента",				Новый ОписаниеТипов("Дата"));
			/*// График отпусков и Отпуска организаций.
*/
			/*// Если указан период отпуска, то для него по производственному календарю будет посчитано количество календарных дней отпуска и рабочие года,
*/
			/*//  за которые эти остатки были и будут заработаны.
*/
			/*// Для каждого периода в поле Примечание будет добавлена информация о том, как остатки отпуска будут израсходованы на указанный период.
*/
			/*// ДатаОкончания = ДатаОстатков всегда.
*/
			//ТаблицаДанных.Колонки.Добавить("ДатаНачала",						Новый ОписаниеТипов("Дата"));
			//ТаблицаДанных.Колонки.Добавить("ДатаОкончания",						Новый ОписаниеТипов("Дата"));
			//ТаблицаДанных.Колонки.Добавить("ТекущийРегистратор",				Документы.ТипВсеСсылки());
			/*// Этот отбор писпользуется только в случае, если задан порядок расчета основного отпуска
*/
			//ТаблицаДанных.Колонки.Добавить("ПорядокРасчетаОсновногоОтпуска",	Новый ОписаниеТипов("ПеречислениеСсылка.ПорядокРасчетаОтпуска"));
			//ТаблицаДанных.Колонки.Добавить("ИсключитьОсновнойОтпуск",			Новый ОписаниеТипов("Булево"));
			//ТаблицаДанных.Колонки.Добавить("ДополнительныйОтпуск",				Новый ОписаниеТипов("ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций"));
			/*// Этот отбор используется, если не пустой
*/
			//ТаблицаДанных.Колонки.Добавить("ВидЕжегодногоОтпуска",				Новый ОписаниеТипов("СправочникСсылка.ВидыЕжегодныхОтпусков"));
			return null;
		}
		// Функция формирует текстовое описание периода отпуска на основе переданных в качестве параметров данных
		//

		public object ОписаниеПериодаОтпуска(/*КоличествоДнейВсего, КоличествоДнейПрошлыхЛет, КоличествоДнейАвансом, ДатаПриемаНаРаботу, ДатаОстатков*/)
		{
			//Комментарий	= Строка(КоличествоДнейВсего) + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",КоличествоДнейВсего);
			//РасшифровкаКомментария = "";
			if(true/*КоличествоДнейВсего > 0*/)
			{
				if(true/*КоличествоДнейПрошлыхЛет > 0*/)
				{
					//РасшифровкаКомментария = ", " + КоличествоДнейПрошлыхЛет + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",КоличествоДнейПрошлыхЛет) + " за счет отпусков прошлых лет";
				}
				if(true/*КоличествоДнейАвансом > 0*/)
				{
					if(true/*ПустаяСтрока(РасшифровкаКомментария)*/)
					{
						//РасшифровкаКомментария = ", ";
					}
					//РасшифровкаКомментария = РасшифровкаКомментария + Строка(КоличествоДнейАвансом) + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",КоличествоДнейАвансом) + " в счет будущего периода";
				}
			}
			//Комментарий = Комментарий + РасшифровкаКомментария;
			if(true/*ДатаПриемаНаРаботу > ДобавитьМесяц(ДатаОстатков, -6)*/)
			{
				if(true/*Не ПустаяСтрока(Комментарий)*/)
				{
					//Комментарий = Комментарий + ". ";
				}
				//Комментарий = Комментарий + "Дата приема на работу: " + Формат(ДатаПриемаНаРаботу, "ДФ='д ММММ гггг ""года""'");
			}
			return null;
		}

		public object ДнейОтпускаВПериоде(/*ДатаНачала, ДатаОкончания, КоличествоДнейОтпускаВГод*/)
		{
			//КоличествоМесяцевПериода		= Месяц(ДатаОкончания) - Месяц(ДатаНачала) + (Год(ДатаОкончания) - Год(ДатаНачала)) * 12;
			//КоличествоДнейПериода			= День(ДатаОкончания) - День(ДатаНачала) + 1;
			if(true/*КоличествоДнейПериода < 0*/)
			{
				//КоличествоДнейПериода		= КоличествоДнейПериода + День(НачалоМесяца(ДатаОкончания) - 1) - 1;
				//КоличествоМесяцевПериода	= КоличествоМесяцевПериода - 1;
			}
			if(true/*КоличествоДнейПериода >= ?(День(ДатаОкончания) - День(ДатаНачала) + 1 >= 0, День(КонецМесяца(ДатаОкончания)), День(НачалоМесяца(ДатаОкончания) - 1)) / 2*/)
			{
				//КоличествоМесяцевПериода	= КоличествоМесяцевПериода + 1;
			}
			return null;
		}
		// Функция, отвечающая за расчет отпусков, положенных сотруднику.
		// Используется всеми остальными функциями.
		//
		// В качестве таблицы данных нужно передать заполненную таблицу значений, по описанию из процедуры ОписаниеТаблицыДанных().
		//
		// Процедуры для списания фактических отпусков

		public void СписатьФактическиеОтпускаКадровымиПриказами(/*Знач Регистратор, Знач Организация*/)
		{
			//ПорядокСписанияФактическихОтпусков = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "ПорядокСписанияФактическихОтпусков");
			if(true/*ПорядокСписанияФактическихОтпусков <> Перечисления.ПорядокСписанияФактическихОтпусков.КадровымиПриказами*/)
			{
				//НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
				//НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
				//НаборЗаписей.Записать();
			}
			/*// Если состояние = ЕжегодныйОтпуск и заполнен ПериодЗавершения, отпуск списывается регистратором;
*/
			/*// Для всех других состояний или пустого ПериодЗавершения отпуск списывается тем регистратором,
*/
			/*//  который прекращает отпуск;
*/
			/*// Если пользователь вводит "Возврат на работу", тем самым досрочно прекращая отпуск, документ
*/
			/*//  делает корректирующее движение. Остальные документы корректирующие движения не делают.
*/
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
			/*Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ЕжегодныеОтпуска.Сотрудник КАК Сотрудник,
	|	ЕжегодныеОтпуска.Период КАК ДатаНачала,
	|	ДОБАВИТЬКДАТЕ(ЕжегодныеОтпуска.ПериодЗавершения, СЕКУНДА, -1) КАК ДатаОкончания,
	|	ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни) КАК ВидОсновногоОтпуска,
	|	ЕжегодныеОтпуска.ДатаНачалаДоп,
	|	ЕжегодныеОтпуска.ВидДополнительногоОтпуска,
	|	ЛОЖЬ КАК КорректироватьОтпуск,
	|	ДАТАВРЕМЯ(1, 1, 1) КАК НоваяДатаОкончания,
	|	ЕжегодныеОтпуска.Регистратор КАК РегистраторНачалаОтпуска
	|ПОМЕСТИТЬ ВТ_ОтпускаСотрудников
	|ИЗ
	|	РегистрСведений.СостояниеРаботниковОрганизаций КАК ЕжегодныеОтпуска
	|ГДЕ
	|	ЕжегодныеОтпуска.Регистратор = &Регистратор
	|	И (НЕ ЕжегодныеОтпуска.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1))
	|	И ЕжегодныеОтпуска.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускЕжегодный)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЕжегодныеОтпускаНачало.Сотрудник,
	|	ЕжегодныеОтпускаНачало.Период,
	|	ВЫБОР
	|		КОГДА ЕжегодныеОтпускаНачало.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДОБАВИТЬКДАТЕ(ЕжегодныеОтпускаОкончание.Период, СЕКУНДА, -1)
	|		ИНАЧЕ ДОБАВИТЬКДАТЕ(ЕжегодныеОтпускаНачало.ПериодЗавершения, СЕКУНДА, -1)
	|	КОНЕЦ,
	|	ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни),
	|	ЕжегодныеОтпускаНачало.ДатаНачалаДоп,
	|	ЕжегодныеОтпускаНачало.ВидДополнительногоОтпуска,
	|	ВЫБОР
	|		КОГДА ЕжегодныеОтпускаОкончание.Регистратор ССЫЛКА Документ.ВозвратНаРаботуОрганизаций
	|				И ЕжегодныеОтпускаНачало.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА ЕжегодныеОтпускаОкончание.Регистратор ССЫЛКА Документ.ВозвратНаРаботуОрганизаций
	|				И ЕжегодныеОтпускаНачало.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДОБАВИТЬКДАТЕ(ЕжегодныеОтпускаОкончание.Период, СЕКУНДА, -1)
	|		ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
	|	КОНЕЦ,
	|	ЕжегодныеОтпускаНачало.Регистратор
	|ИЗ
	|	(ВЫБРАТЬ
	|		ЕжегодныеОтпускаОкончание.Сотрудник КАК Сотрудник,
	|		МАКСИМУМ(ЕжегодныеОтпускаНачало.Период) КАК ДатаНачала,
	|		ЕжегодныеОтпускаОкончание.Период КАК ДатаОкончания
	|	ИЗ
	|		РегистрСведений.СостояниеРаботниковОрганизаций КАК ЕжегодныеОтпускаНачало
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК ЕжегодныеОтпускаОкончание
	|			ПО ЕжегодныеОтпускаНачало.Сотрудник = ЕжегодныеОтпускаОкончание.Сотрудник
	|				И ЕжегодныеОтпускаНачало.Период < ЕжегодныеОтпускаОкончание.Период
	|				И (ЕжегодныеОтпускаОкончание.Регистратор = &Регистратор)
	|				И (ЕжегодныеОтпускаОкончание.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускЕжегодный))
	|	
	|	СГРУППИРОВАТЬ ПО
	|		ЕжегодныеОтпускаОкончание.Сотрудник,
	|		ЕжегодныеОтпускаОкончание.Период) КАК ЕжегодныеОтпускаНачалоСрез
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК ЕжегодныеОтпускаНачало
	|		ПО ЕжегодныеОтпускаНачалоСрез.Сотрудник = ЕжегодныеОтпускаНачало.Сотрудник
	|			И ЕжегодныеОтпускаНачалоСрез.ДатаНачала = ЕжегодныеОтпускаНачало.Период
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК ЕжегодныеОтпускаОкончание
	|		ПО ЕжегодныеОтпускаНачалоСрез.Сотрудник = ЕжегодныеОтпускаОкончание.Сотрудник
	|			И ЕжегодныеОтпускаНачалоСрез.ДатаОкончания = ЕжегодныеОтпускаОкончание.Период
	|ГДЕ
	|	ЕжегодныеОтпускаНачало.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускЕжегодный)
	|	И ВЫБОР
	|			КОГДА ЕжегодныеОтпускаНачало.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	|				ТОГДА ВЫБОР
	|						КОГДА ЕжегодныеОтпускаОкончание.Регистратор ССЫЛКА Документ.ВозвратНаРаботуОрганизаций
	|							ТОГДА ИСТИНА
	|						ИНАЧЕ ЛОЖЬ
	|					КОНЕЦ
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ
	|	И ВЫБОР
	|			КОГДА ЕжегодныеОтпускаОкончание.Регистратор ССЫЛКА Документ.ВозвратНаРаботуОрганизаций
	|					И ЕжегодныеОтпускаНачало.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	|				ТОГДА ЕжегодныеОтпускаНачало.ПериодЗавершения > ЕжегодныеОтпускаОкончание.Период
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ОтпускаСотрудников.Сотрудник,
	|	ОтпускаСотрудников.ДатаНачала КАК ДатаНачала,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1)
	|				ИЛИ ОтпускаСотрудников.ВидДополнительногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка)
	|				ИЛИ ОтпускаСотрудников.ДатаОкончания < ОтпускаСотрудников.ДатаНачалаДоп
	|			ТОГДА ОтпускаСотрудников.ДатаОкончания
	|		ИНАЧЕ ДОБАВИТЬКДАТЕ(ОтпускаСотрудников.ДатаНачалаДоп, СЕКУНДА, -1)
	|	КОНЕЦ КАК ДатаОкончания,
	|	ОтпускаСотрудников.ВидОсновногоОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.КорректироватьОтпуск
	|				И ОтпускаСотрудников.НоваяДатаОкончания < ВЫБОР
	|					КОГДА ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1)
	|							ИЛИ ОтпускаСотрудников.ВидДополнительногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка)
	|						ТОГДА ОтпускаСотрудников.ДатаОкончания
	|					ИНАЧЕ ДОБАВИТЬКДАТЕ(ОтпускаСотрудников.ДатаНачалаДоп, СЕКУНДА, -1)
	|				КОНЕЦ
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК КорректироватьОтпуск,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.НоваяДатаОкончания < ВЫБОР
	|				КОГДА ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1)
	|						ИЛИ ОтпускаСотрудников.ВидДополнительногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка)
	|					ТОГДА ОтпускаСотрудников.ДатаОкончания
	|				ИНАЧЕ ДОБАВИТЬКДАТЕ(ОтпускаСотрудников.ДатаНачалаДоп, СЕКУНДА, -1)
	|			КОНЕЦ
	|			ТОГДА ОтпускаСотрудников.НоваяДатаОкончания
	|		ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
	|	КОНЕЦ КАК НоваяДатаОкончания,
	|	СУММА(ВЫБОР
	|			КОГДА ОтпускаСотрудников.ВидОсновногоОтпуска.ВидЕжегодногоОтпуска.СпособРасчетаОстаткаОтпуска = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням)
	|				ТОГДА ЕСТЬNULL(ПроизводственныйКалендарь.Шестидневка, 0)
	|			ИНАЧЕ ЕСТЬNULL(ПроизводственныйКалендарь.КалендарныеДни, 0)
	|		КОНЕЦ) КАК ДнейОтпуска,
	|	ОтпускаСотрудников.РегистраторНачалаОтпуска
	|ПОМЕСТИТЬ ВТ_КадровыеОтпуска
	|ИЗ
	|	ВТ_ОтпускаСотрудников КАК ОтпускаСотрудников
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК ПроизводственныйКалендарь
	|		ПО (ПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ОтпускаСотрудников.ДатаНачала И ВЫБОР
	|				КОГДА ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1)
	|						ИЛИ ОтпускаСотрудников.ВидДополнительногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка)
	|						ИЛИ ОтпускаСотрудников.ДатаОкончания < ОтпускаСотрудников.ДатаНачалаДоп
	|					ТОГДА ОтпускаСотрудников.ДатаОкончания
	|				ИНАЧЕ ДОБАВИТЬКДАТЕ(ОтпускаСотрудников.ДатаНачалаДоп, СЕКУНДА, -1)
	|			КОНЕЦ)
	|ГДЕ
	|	(НЕ ОтпускаСотрудников.ВидОсновногоОтпуска.ВидЕжегодногоОтпуска = ЗНАЧЕНИЕ(Справочник.ВидыЕжегодныхОтпусков.ПустаяСсылка))
	|
	|СГРУППИРОВАТЬ ПО
	|	ОтпускаСотрудников.Сотрудник,
	|	ОтпускаСотрудников.ДатаНачала,
	|	ОтпускаСотрудников.ВидОсновногоОтпуска.ВидЕжегодногоОтпуска,
	|	ОтпускаСотрудников.РегистраторНачалаОтпуска,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1)
	|				ИЛИ ОтпускаСотрудников.ВидДополнительногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка)
	|				ИЛИ ОтпускаСотрудников.ДатаОкончания < ОтпускаСотрудников.ДатаНачалаДоп
	|			ТОГДА ОтпускаСотрудников.ДатаОкончания
	|		ИНАЧЕ ДОБАВИТЬКДАТЕ(ОтпускаСотрудников.ДатаНачалаДоп, СЕКУНДА, -1)
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.КорректироватьОтпуск
	|				И ОтпускаСотрудников.НоваяДатаОкончания < ВЫБОР
	|					КОГДА ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1)
	|							ИЛИ ОтпускаСотрудников.ВидДополнительногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка)
	|						ТОГДА ОтпускаСотрудников.ДатаОкончания
	|					ИНАЧЕ ДОБАВИТЬКДАТЕ(ОтпускаСотрудников.ДатаНачалаДоп, СЕКУНДА, -1)
	|				КОНЕЦ
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.НоваяДатаОкончания < ВЫБОР
	|				КОГДА ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1)
	|						ИЛИ ОтпускаСотрудников.ВидДополнительногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка)
	|					ТОГДА ОтпускаСотрудников.ДатаОкончания
	|				ИНАЧЕ ДОБАВИТЬКДАТЕ(ОтпускаСотрудников.ДатаНачалаДоп, СЕКУНДА, -1)
	|			КОНЕЦ
	|			ТОГДА ОтпускаСотрудников.НоваяДатаОкончания
	|		ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
	|	КОНЕЦ
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ОтпускаСотрудников.Сотрудник,
	|	ОтпускаСотрудников.ДатаНачалаДоп,
	|	ОтпускаСотрудников.ДатаОкончания,
	|	ОтпускаСотрудников.ВидДополнительногоОтпуска.ВидЕжегодногоОтпуска,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.КорректироватьОтпуск
	|				И ОтпускаСотрудников.НоваяДатаОкончания < ОтпускаСотрудников.ДатаОкончания
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.НоваяДатаОкончания < ОтпускаСотрудников.ДатаОкончания
	|			ТОГДА ОтпускаСотрудников.НоваяДатаОкончания
	|		ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
	|	КОНЕЦ,
	|	СУММА(ВЫБОР
	|			КОГДА ОтпускаСотрудников.ВидДополнительногоОтпуска.ВидЕжегодногоОтпуска.СпособРасчетаОстаткаОтпуска = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням)
	|				ТОГДА ЕСТЬNULL(ПроизводственныйКалендарь.Шестидневка, 0)
	|			ИНАЧЕ ЕСТЬNULL(ПроизводственныйКалендарь.КалендарныеДни, 0)
	|		КОНЕЦ),
	|	ОтпускаСотрудников.РегистраторНачалаОтпуска
	|ИЗ
	|	ВТ_ОтпускаСотрудников КАК ОтпускаСотрудников
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК ПроизводственныйКалендарь
	|		ПО (ПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ОтпускаСотрудников.ДатаНачалаДоп И ОтпускаСотрудников.ДатаОкончания)
	|ГДЕ
	|	(НЕ ОтпускаСотрудников.ВидДополнительногоОтпуска.ВидЕжегодногоОтпуска = ЗНАЧЕНИЕ(Справочник.ВидыЕжегодныхОтпусков.ПустаяСсылка))
	|	И (НЕ ОтпускаСотрудников.ДатаНачалаДоп = ДАТАВРЕМЯ(1, 1, 1))
	|
	|СГРУППИРОВАТЬ ПО
	|	ОтпускаСотрудников.Сотрудник,
	|	ОтпускаСотрудников.ДатаНачалаДоп,
	|	ОтпускаСотрудников.ДатаОкончания,
	|	ОтпускаСотрудников.ВидДополнительногоОтпуска.ВидЕжегодногоОтпуска,
	|	ОтпускаСотрудников.РегистраторНачалаОтпуска,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.КорректироватьОтпуск
	|				И ОтпускаСотрудников.НоваяДатаОкончания < ОтпускаСотрудников.ДатаОкончания
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА ОтпускаСотрудников.НоваяДатаОкончания < ОтпускаСотрудников.ДатаОкончания
	|			ТОГДА ОтпускаСотрудников.НоваяДатаОкончания
	|		ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
	|	КОНЕЦ
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	ДатаНачала,
	|	ДатаОкончания
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	СостояниеРаботниковОрганизаций.Регистратор.Дата КАК ДатаРегистрации
	|ПОМЕСТИТЬ ВТ_ДатаРегистрации
	|ИЗ
	|	РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
	|ГДЕ
	|	СостояниеРаботниковОрганизаций.Регистратор = &Регистратор
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Отпуска.Сотрудник КАК Сотрудник,
	|	Отпуска.ВидЕжегодногоОтпуска,
	|	ВЫБОР
	|		КОГДА Отпуска.КорректироватьОтпуск
	|			ТОГДА Отпуска.ДатаНачала
	|		ИНАЧЕ Отпуска.ДатаНачала
	|	КОНЕЦ КАК ДатаНачала,
	|	Отпуска.ДатаОкончания,
	|	ВЫБОР
	|		КОГДА Отпуска.КорректироватьОтпуск
	|			ТОГДА Отпуска.НовоеКоличествоКадровыхДнейОтпуска - Отпуска.КадровыхДнейОтпуска
	|		ИНАЧЕ Отпуска.КадровыхДнейОтпуска - Отпуска.РасчетныхДнейОтпуска
	|	КОНЕЦ КАК ДнейОтпуска,
	|	ВТ_ДатаРегистрации.ДатаРегистрации
	|ИЗ
	|	(ВЫБРАТЬ
	|		КадровыеОтпуска.Сотрудник КАК Сотрудник,
	|		КадровыеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
	|		КадровыеОтпуска.ДатаНачала КАК ДатаНачала,
	|		КадровыеОтпуска.ДатаОкончания КАК ДатаОкончания,
	|		СУММА(ЕСТЬNULL(ФактическиеОтпускаОрганизаций.Количество, 0)) КАК РасчетныхДнейОтпуска,
	|		КадровыеОтпуска.ДнейОтпуска КАК КадровыхДнейОтпуска,
	|		КадровыеОтпуска.НовоеКоличествоДнейОтпуска КАК НовоеКоличествоКадровыхДнейОтпуска,
	|		КадровыеОтпуска.КорректироватьОтпуск КАК КорректироватьОтпуск
	|	ИЗ
	|		(ВЫБРАТЬ
	|			КадровыеОтпуска.Сотрудник КАК Сотрудник,
	|			КадровыеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
	|			ВЫБОР
	|				КОГДА КадровыеОтпуска.КорректироватьОтпуск
	|					ТОГДА ДОБАВИТЬКДАТЕ(КадровыеОтпуска.НоваяДатаОкончания, СЕКУНДА, 1)
	|				ИНАЧЕ КадровыеОтпуска.ДатаНачала
	|			КОНЕЦ КАК ДатаНачала,
	|			КадровыеОтпуска.ДатаОкончания КАК ДатаОкончания,
	|			КадровыеОтпуска.ДнейОтпуска КАК ДнейОтпуска,
	|			КадровыеОтпуска.КорректироватьОтпуск КАК КорректироватьОтпуск,
	|			СУММА(ВЫБОР
	|					КОГДА КадровыеОтпуска.ВидЕжегодногоОтпуска.СпособРасчетаОстаткаОтпуска = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням)
	|						ТОГДА ЕСТЬNULL(ПроизводственныйКалендарьКорректировка.Шестидневка, 0)
	|					ИНАЧЕ ЕСТЬNULL(ПроизводственныйКалендарьКорректировка.КалендарныеДни, 0)
	|				КОНЕЦ) КАК НовоеКоличествоДнейОтпуска,
	|			КадровыеОтпуска.РегистраторНачалаОтпуска КАК РегистраторНачалаОтпуска
	|		ИЗ
	|			ВТ_КадровыеОтпуска КАК КадровыеОтпуска
	|				ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК ПроизводственныйКалендарьКорректировка
	|				ПО (ПроизводственныйКалендарьКорректировка.ДатаКалендаря МЕЖДУ КадровыеОтпуска.ДатаНачала И КадровыеОтпуска.НоваяДатаОкончания)
	|					И (КадровыеОтпуска.КорректироватьОтпуск)
	|		
	|		СГРУППИРОВАТЬ ПО
	|			КадровыеОтпуска.Сотрудник,
	|			КадровыеОтпуска.ВидЕжегодногоОтпуска,
	|			КадровыеОтпуска.ДатаОкончания,
	|			КадровыеОтпуска.КорректироватьОтпуск,
	|			КадровыеОтпуска.ДнейОтпуска,
	|			КадровыеОтпуска.РегистраторНачалаОтпуска,
	|			ВЫБОР
	|				КОГДА КадровыеОтпуска.КорректироватьОтпуск
	|					ТОГДА ДОБАВИТЬКДАТЕ(КадровыеОтпуска.НоваяДатаОкончания, СЕКУНДА, 1)
	|				ИНАЧЕ КадровыеОтпуска.ДатаНачала
	|			КОНЕЦ) КАК КадровыеОтпуска
	|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ФактическиеОтпускаОрганизаций КАК ФактическиеОтпускаОрганизаций
	|			ПО КадровыеОтпуска.Сотрудник = ФактическиеОтпускаОрганизаций.Сотрудник
	|				И КадровыеОтпуска.ВидЕжегодногоОтпуска = ФактическиеОтпускаОрганизаций.ВидЕжегодногоОтпуска
	|				И (ФактическиеОтпускаОрганизаций.Период МЕЖДУ КадровыеОтпуска.ДатаНачала И КадровыеОтпуска.ДатаОкончания
	|					ИЛИ ФактическиеОтпускаОрганизаций.ДатаОкончания МЕЖДУ КадровыеОтпуска.ДатаНачала И КадровыеОтпуска.ДатаОкончания
	|					ИЛИ КадровыеОтпуска.ДатаНачала МЕЖДУ ФактическиеОтпускаОрганизаций.Период И ФактическиеОтпускаОрганизаций.ДатаОкончания
	|					ИЛИ КадровыеОтпуска.ДатаОкончания МЕЖДУ ФактическиеОтпускаОрганизаций.Период И ФактическиеОтпускаОрганизаций.ДатаОкончания)
	|				И (ФактическиеОтпускаОрганизаций.Регистратор <> &Регистратор)
	|				И КадровыеОтпуска.РегистраторНачалаОтпуска <> ФактическиеОтпускаОрганизаций.Регистратор
	|				И КадровыеОтпуска.РегистраторНачалаОтпуска.Дата > ФактическиеОтпускаОрганизаций.ДатаРегистрации
	|	
	|	СГРУППИРОВАТЬ ПО
	|		КадровыеОтпуска.Сотрудник,
	|		КадровыеОтпуска.ВидЕжегодногоОтпуска,
	|		КадровыеОтпуска.ДатаНачала,
	|		КадровыеОтпуска.ДатаОкончания,
	|		КадровыеОтпуска.ДнейОтпуска,
	|		КадровыеОтпуска.НовоеКоличествоДнейОтпуска,
	|		КадровыеОтпуска.КорректироватьОтпуск) КАК Отпуска,
	|	ВТ_ДатаРегистрации КАК ВТ_ДатаРегистрации
	|ГДЕ
	|	ВЫБОР
	|			КОГДА Отпуска.КорректироватьОтпуск
	|				ТОГДА Отпуска.НовоеКоличествоКадровыхДнейОтпуска - Отпуска.КадровыхДнейОтпуска <> 0
	|			ИНАЧЕ Отпуска.КадровыхДнейОтпуска - Отпуска.РасчетныхДнейОтпуска <> 0
	|		КОНЕЦ
	|
	|УПОРЯДОЧИТЬ ПО
	|	Сотрудник,
	|	ДатаНачала";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			//НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
			//НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
			while(true/*Выборка.Следующий()*/)
			{
				//Движение = НаборЗаписей.Добавить();
				/*// Свойства
*/
				//Движение.Период							= Выборка.ДатаНачала;
				/*// Измерения
*/
				//Движение.Сотрудник						= Выборка.Сотрудник;
				//Движение.ВидЕжегодногоОтпуска			= Выборка.ВидЕжегодногоОтпуска;
				/*// Ресурсы
*/
				//Движение.Количество						= Выборка.ДнейОтпуска;
				/*// Реквизиты
*/
				//Движение.ДатаОкончания					= Выборка.ДатаОкончания;
				//Движение.ДатаРегистрации				= Выборка.ДатаРегистрации;
			}
			/*;
	НаборЗаписей.Записать();*/
		}

		public void СписатьФактическиеОтпускаОсновнымиНачислениями(/*Знач Регистратор, Знач Организация*/)
		{
			//ПорядокСписанияФактическихОтпусков = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "ПорядокСписанияФактическихОтпусков");
			if(true/*ПорядокСписанияФактическихОтпусков <> Перечисления.ПорядокСписанияФактическихОтпусков.РасчетнымиДокументами*/)
			{
			}
			/*// Необходимо получить фактическое количество дней отпуска, используя таблицу ФПД
*/
			/*// Необходимо собрать данные по кадровым отпускам за те же периоды и по тем сотрудникам
*/
			/*// После чего сделать движения на положительную разницу количества дней отпуска между кадровыми и расчетными данными
*/
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
			/*Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Начисления.Сотрудник КАК Сотрудник,
	|	Начисления.ПериодДействия КАК ПериодДействия,
	|	Начисления.ВидРасчета КАК ВидРасчета,
	|	Начисления.Регистратор
	|ПОМЕСТИТЬ ВТ_СотрудникиПериодыДействия
	|ИЗ
	|	РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления
	|ГДЕ
	|	Начисления.Регистратор = &Регистратор
	|	И (НЕ Начисления.ВидРасчета.ВидЕжегодногоОтпуска = ЗНАЧЕНИЕ(Справочник.ВидыЕжегодныхОтпусков.ПустаяСсылка))
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Сотрудник,
	|	ПериодДействия,
	|	ВидРасчета
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	НачисленияФПД.Сотрудник КАК Сотрудник,
	|	НачисленияФПД.ПериодДействияНачало КАК ПериодДействияНачало,
	|	НачисленияФПД.ПериодДействияКонец КАК ПериодДействияКонец,
	|	НачисленияФПД.ВидРасчета.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
	|	СУММА(ПроизводственныйКалендарь.КалендарныеДни * ВЫБОР
	|			КОГДА НачисленияФПД.Сторно
	|				ТОГДА -1
	|			ИНАЧЕ 1
	|		КОНЕЦ) КАК ДнейОтпуска,
	|	НачисленияФПД.Сторно КАК Сторно,
	|	НачисленияФПД.Регистратор.Дата КАК ДатаРегистрации,
	|	НачисленияФПД.НомерСтроки КАК НомерСтроки
	|ИЗ
	|	РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ФактическийПериодДействия(
	|			(Сотрудник, ПериодДействия, ВидРасчета, Регистратор) В
	|				(ВЫБРАТЬ
	|					ОсновныеНачисления.Сотрудник,
	|					ОсновныеНачисления.ПериодДействия,
	|					ОсновныеНачисления.ВидРасчета,
	|					ОсновныеНачисления.Регистратор
	|				ИЗ
	|					ВТ_СотрудникиПериодыДействия КАК ОсновныеНачисления)) КАК НачисленияФПД
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК ПроизводственныйКалендарь
	|		ПО (ПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ НачисленияФПД.ПериодДействияНачало И НачисленияФПД.ПериодДействияКонец)
	|
	|СГРУППИРОВАТЬ ПО
	|	НачисленияФПД.Сотрудник,
	|	НачисленияФПД.ПериодДействияНачало,
	|	НачисленияФПД.ПериодДействияКонец,
	|	НачисленияФПД.Сторно,
	|	НачисленияФПД.ВидРасчета.ВидЕжегодногоОтпуска,
	|	НачисленияФПД.Регистратор.Дата,
	|	НачисленияФПД.НомерСтроки
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			//НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
			//НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
			//НаборЗаписей.Прочитать();
			while(true/*Выборка.Следующий()*/)
			{
				//Движение = НаборЗаписей.Добавить();
				/*// Свойства
*/
				//Движение.Период					= Выборка.ПериодДействияНачало;
				/*// Измерения
*/
				//Движение.Сотрудник				= Выборка.Сотрудник;
				//Движение.ВидЕжегодногоОтпуска	= Выборка.ВидЕжегодногоОтпуска;
				/*// Ресурсы
*/
				//Движение.Количество				= Выборка.ДнейОтпуска;
				/*// Реквизиты
*/
				//Движение.ДатаОкончания			= Выборка.ПериодДействияКонец;
				//Движение.ДатаРегистрации		= Выборка.ДатаРегистрации;
			}
			/*;
	НаборЗаписей.Записать();*/
		}

		public void СписатьФактическиеОтпускаДополнительнымиНачислениями(/*Знач Регистратор*/)
		{
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
			/*Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Начисления.Сотрудник КАК Сотрудник,
	|	Начисления.ДатаНачалаСобытия КАК ПериодДействия,
	|	Начисления.Сторно КАК Сторно,
	|	Начисления.ВидРасчета.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
	|	Начисления.ОплаченоДнейЧасов КАК ДнейОтпуска,
	|	Начисления.Регистратор.Дата КАК ДатаРегистрации
	|ИЗ
	|	РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК Начисления
	|ГДЕ
	|	Начисления.Регистратор = &Регистратор
	|	И (НЕ Начисления.ВидРасчета.ВидЕжегодногоОтпуска = ЗНАЧЕНИЕ(Справочник.ВидыЕжегодныхОтпусков.ПустаяСсылка))
	|
	|УПОРЯДОЧИТЬ ПО
	|	Сотрудник,
	|	Сторно УБЫВ";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			//НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
			//НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
			//НаборЗаписей.Прочитать();
			while(true/*Выборка.Следующий()*/)
			{
				//Движение = НаборЗаписей.Добавить();
				/*// Свойства
*/
				//Движение.Период					= Выборка.ПериодДействия;
				/*// Измерения
*/
				//Движение.Сотрудник				= Выборка.Сотрудник;
				//Движение.ВидЕжегодногоОтпуска	= Выборка.ВидЕжегодногоОтпуска;
				/*// Ресурсы
*/
				//Движение.Количество				= Выборка.ДнейОтпуска;
				/*// Реквизиты
*/
				//Движение.Компенсация			= Истина;
				//Движение.ДатаРегистрации		= Выборка.ДатаРегистрации;
			}
			/*;
	НаборЗаписей.Записать();*/
		}

		public void СписатьФактическиеОтпускаУдержаниями(/*Регистратор*/)
		{
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
			/*Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Удержания.Сотрудник КАК Сотрудник,
	|	Удержания.ДатаНачалаСобытия КАК ПериодДействия,
	|	Удержания.Сторно КАК Сторно,
	|	Начисления.ВидЕжегодногоОтпуска,
	|	Удержания.Показатель1 КАК ДнейОтпуска,
	|	Удержания.Регистратор.Дата КАК ДатаРегистрации
	|ИЗ
	|	РегистрРасчета.УдержанияРаботниковОрганизаций КАК Удержания
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций КАК Начисления
	|		ПО (Начисления.Ссылка = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКалендарныеДни))
	|			И ((НЕ Начисления.ВидЕжегодногоОтпуска = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.ПустаяСсылка)))
	|ГДЕ
	|	Удержания.Регистратор = &Регистратор
	|	И Удержания.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.УдержанияОрганизаций.УдержаниеЗаНеотработанныйОтпускКалендарныеДни)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Сотрудник,
	|	Сторно УБЫВ";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			//НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
			//НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
			//НаборЗаписей.Прочитать();
			while(true/*Выборка.Следующий()*/)
			{
				//Движение = НаборЗаписей.Добавить();
				/*// Свойства
*/
				//Движение.Период					= Выборка.ПериодДействия;
				/*// Измерения
*/
				//Движение.Сотрудник				= Выборка.Сотрудник;
				//Движение.ВидЕжегодногоОтпуска	= Выборка.ВидЕжегодногоОтпуска;
				/*// Ресурсы
*/
				//Движение.Количество				= -Выборка.ДнейОтпуска * ?(Выборка.Сторно, -1, 1);
				/*// Реквизиты
*/
				//Движение.Компенсация			= Истина;
				//Движение.ДатаРегистрации		= Выборка.ДатаРегистрации;
			}
			/*;
	НаборЗаписей.Записать();*/
		}
		// Процедура записи расчитанных остатков в справочник остатков

		public object ОстатокОтпускаСпискаСотрудниковНаПоследнийРабочийГод(/*Знач МассивСотрудников, Знач ДатаОстатков = '00010101'*/)
		{
			if(true/*Не ЗначениеЗаполнено(ДатаОстатков)*/)
			{
				//ДатаОстатков = ОбщегоНазначения.ПолучитьРабочуюДату();
			}
			//ТаблицаДанных = ОписаниеТаблицыДанных();
			//Результат = ОстаткиОтпусков(ТаблицаДанных);
			//ТаблицаСведений = Новый ТаблицаЗначений;
			//ТаблицаСведений.Колонки.Добавить("Сотрудник");
			//ТаблицаСведений.Колонки.Добавить("ОстаткиВРазрезеВидовОтпусков");
			return null;
		}

		public void РассчитатьОстаткиИЗаписатьИхВСправочник(/**/)
		{
			//РабДата = НачалоДня(ОбщегоНазначения.ПолучитьРабочуюДату());
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("РабДата",	РабДата);
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	РаботникиСрезПоследних.Сотрудник КАК Сотрудник
	|ИЗ
	|	РегистрСведений.РаботникиОрганизаций.СрезПоследних(&РабДата, ) КАК РаботникиСрезПоследних
	|ГДЕ
	|	РаботникиСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)";*/
			//СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Сотрудник");
			//Результат = ОстатокОтпускаСпискаСотрудниковНаПоследнийРабочийГод(СписокСотрудников, РабДата);
		}
	}
}
